package pers.sen.health.controller;


import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import pers.sen.health.aliyunoss.AliyunUtils;
import pers.sen.health.dto.SetmealDTO;
import pers.sen.health.entity.QueryPageBean;
import pers.sen.health.entity.Result;
import pers.sen.health.redis.RedisUtil;
import pers.sen.health.resources.RedisConstant;
import pers.sen.health.resources.UploadUtils;
import pers.sen.health.service.SetMealService;


import java.io.IOException;
import java.util.concurrent.TimeUnit;

/**
 * @author Jason
 * @version 1.0.0
 * @date 2020/11/7 19:15
 * @Description TODO
 */
@RestController
public class SetMealController {

    @Reference
    private SetMealService setMealService;

    // 分页查询
    @PostMapping("setmeal/findPage")
    public Result findPage(@RequestBody QueryPageBean queryPageBean) {
        return new Result(setMealService.findPage(queryPageBean));
    }


    // 图片上传
    @PostMapping("setmeal/upload")
    public Result upload(@RequestParam("imgFile") MultipartFile file){
        try {
            //  MultipartFile file  上传文件对象
            // 获取上传过来的文件名：xxx.jpg
            String originalFilename = file.getOriginalFilename();
            // 通过工具类，生成不重复的文件名：uuid.jpg
            String uuidfilename = UploadUtils.generateRandonFileName(originalFilename);
            // 通过工具类封装阿里云sdk，上传文件：file（字节上传file.getBytes()），设置文件名：uuid.jpg（uuidfilename）
            AliyunUtils.uploadMultiPartFileToAliyun(file.getBytes(),uuidfilename);
            // 图片信息 保存到 redis的 set类型中（set的key【uuidfilename】不重复）
            RedisUtil.addToSet(RedisConstant.ALL_SETMEAL_PIC_SET,uuidfilename);
            // 图片存储到redis的String类型中，保存10分钟   超过 10分 redis  自动删除该图片信息
            // key=single:file:uuidfilename【:为文件夹】
            RedisUtil.set(RedisConstant.SINGLE_PIC+uuidfilename,uuidfilename,10, TimeUnit.MINUTES);
            // 返回文件名给前端，作为上传成功的返回信息
            // 注意：不同于axios请求，虽然文件名封装到了Result的data属性中，前端res指的就是Result对象
            return  new Result(uuidfilename);
        } catch (IOException e) {
            e.printStackTrace();
            throw  new RuntimeException(e.getMessage());
        }
    }


    // 添加修改
    @PostMapping("setmeal/addOrUpdate")
    public Result addOrUpdate(@RequestBody SetmealDTO setmealDTO) {
        return new Result(setMealService.insertSetMeal(setmealDTO));
    }

//    // 删除（改变显示状态）
//    @PostMapping("checkgroup/updateIsDeleteById")
//    public Result updateIsDeleteById(@RequestBody CheckGroup checkGroup) {
//        return new Result(checkGroupService.updateIsDeleteById(checkGroup));
//    }
//
//    @GetMapping("checkgroup/findCheckItemInfoByGroupId/{id}")
//    public Result findCheckItemInfoByGroupId(@PathVariable("id") int id) {
//        return new Result(checkGroupService.findCheckItemInfoByGroupId(id));
//    }
}
